/*
  2019-5-16
  柯里化
  柯里化实现累加，将add(x1,x2,x3,x4...)转换为add(x1)(x2)(x3)...的方式
*/
function isContain(regex, text){
  //正则表达式设置了全局标志，test() 的执行会改变正则表达式lastIndex属性
  //连续的执行test()方法，后续的执行将会从 lastIndex 处开始匹配字符串
  //let rg = new RegExp(regex, 'g');
  let rg = new RegExp(regex);
  return rg.test(text);
}
//验证手机电话，反斜杠需要两个以转译为\d
console.log(isContain('^1[34578]\\d{9}$', 15899909987));
//验证其他特定的语义，反斜杠需要两个以转译为*
console.log(isContain('chen\\*\\*', 'dddchen**wwwww'));

function curry_IsContain(regex){
  //闭包
  let t_regx = new RegExp(regex);
  function test(text){
    return t_regx.test(text);
  }
  return test;
}
let isPhonenum = curry_IsContain('^1[34578]\\d{9}$');
let isChen = curry_IsContain('chen\\*\\*');
console.log('curry', isPhonenum(15833321222));
console.log('curry', isChen('chen*dddd'));



//柯里化实现累加
function LeijiAdd(pa){
  function add(pb){
    pa+=pb;
    return add;
  }
  add.toString=function(){
    return pa;
  }
  return add;
}
LeijiAdd.toString=function(){
  return '测试自动执行toString';
}
console.log(LeijiAdd);  //function，此时输出toString
console.log(LeijiAdd(1)(2)(5));

var person={
  name: 'chen...',
  toString: function(){
    return this.name;
  }
}
console.log(person);  //object，输出Object{...}